package main.java.viable;

import java.util.List;

public class Estacion {

	/**
	 * @uml.property name="color"
	 */
	private Color color;

	/**
	 * Getter of the property <tt>color</tt>
	 * 
	 * @return Returns the color.
	 * @uml.property name="color"
	 */
	public Color getColor() {
		return color;
	}

	/**
	 * Setter of the property <tt>color</tt>
	 * 
	 * @param color
	 *            The color to set.
	 * @uml.property name="color"
	 */
	public void setColor(Color color) {
		if(color==null){
			throw new IllegalArgumentException();
		}
		this.color = color;
	}

	/**
	 * @uml.property name="construida"
	 */
	private boolean construida;

	/**
	 * Getter of the property <tt>construida</tt>
	 * 
	 * @return Returns the construida.
	 * @uml.property name="construida"
	 */
	public boolean isConstruida() {
		return construida;
	}

	/**
	 * Setter of the property <tt>construida</tt>
	 * 
	 * @param construida
	 *            The construida to set.
	 * @uml.property name="construida"
	 */
	public void setConstruida(boolean construida) {
		this.construida = construida;
	}

	/**
	 * @uml.property name="mercancia"
	 */
	private Mercancia mercancia;

	/**
	 * Getter of the property <tt>mercancia</tt>
	 * 
	 * @return Returns the mercancia.
	 * @uml.property name="mercancia"
	 */
	public Mercancia getMercancia() {
		return mercancia;
	}

	/**
	 * Setter of the property <tt>mercancia</tt>
	 * 
	 * @param mercancia
	 *            The mercancia to set.
	 * @uml.property name="mercancia"
	 */
	public void setMercancia(Mercancia mercancia) {
		if(mercancia==null){
			throw new IllegalArgumentException();
		}
		this.mercancia = mercancia;
	}

	/**
	 * @uml.property name="estacion"
	 */
	private NombreEstaciones estacion;

	/**
	 * Getter of the property <tt>estacion</tt>
	 * 
	 * @return Returns the estacion.
	 * @uml.property name="estacion"
	 */
	public NombreEstaciones getEstacion() {
		return estacion;
	}

	/**
	 * Setter of the property <tt>estacion</tt>
	 * 
	 * @param estacion
	 *            The estacion to set.
	 * @uml.property name="estacion"
	 */
	public void setEstacion(NombreEstaciones estacion) {
		if(estacion==null){
			throw new IllegalArgumentException();
		}
		this.estacion = estacion;
	}

	/**
	 * @uml.property name="vecinos"
	 * @uml.associationEnd multiplicity="(0 -1)" ordering="true"
	 *                     inverse="estacion1:viable.Estacion"
	 */
	private List<Estacion> vecinos;

	/**
	 * Getter of the property <tt>vecinos</tt>
	 * 
	 * @return Returns the vecinos.
	 * @uml.property name="vecinos"
	 */
	public List<Estacion> getVecinos() {
		return vecinos;
	}

	/**
	 * Setter of the property <tt>vecinos</tt>
	 * 
	 * @param vecinos
	 *            The vecinos to set.
	 * @uml.property name="vecinos"
	 */
	public void addVecinos(List<Estacion> vecinos) {
		if(vecinos==null){
			throw new IllegalArgumentException();
		}
		this.vecinos = vecinos;
	}

	public Estacion(NombreEstaciones nombreEstacion, Color color, Boolean construida, Mercancia mercancia) {
		if(nombreEstacion==null || color==null || construida==null || mercancia==null){
			throw new IllegalArgumentException();
		}
		
		estacion = nombreEstacion;
		this.color = color;
		this.construida = construida;
		this.mercancia = mercancia;

	}
	
	
	
	public String toString(){
		return exp(this.getEstacion());
	}
	
	public String exp(NombreEstaciones ne){
		return ne.toString();
	}

}
